It is typical of the printing architectures in modern operating systems such as Microsoft Windows, Mac OS, and now Linux to make use of Print Drivers. Print Drivers are responsible for converting the PC/workstation Operating System Graphical User Interface (GUI) Application programming interface (API) calls issued by various applications to a data format suitable for consumption by a printer. Typically the print driver converts the data into either a Page Description Language, such as Printer Command Language (PCL) which is a Page description language (PDL) developed as a printer protocol and has become a de facto industry standard or PostScript, or directly to a proprietary print-ready compressed raster format. It has historically been the case that Print Drivers are designed to function in a single-threaded manner and operate in the background, utilizing spare processing power to process pending print jobs. However, faster print engine speeds, higher printer resolutions and ever more complex documents, such as compound documents incorporating images, text, and graphics make it increasingly difficult for such Print Drivers to keep up with the print engine. Further, since print drivers were not developed with support for multiple processors in mind, they are simply not able to make use of extra processing power that is present on systems with multiple processors.
It has recently become common for PCs used in typical office environments to include multiple general-purpose processors sharing common memory resources (e.g. a Symmetric Multiprocessing architecture), and this trend is likely to continue, with the number of processors available on new systems increasing over time. In a typical office use scenario the processors on any given machine are not heavily loaded. Users often spend a majority of their time viewing and editing documents created with common office applications such as word processors, spreadsheets, and the like. In these scenarios the load on the processor(s) is minimal and processors may in fact be idle for much of the time. As the number of processors found on typical systems continues to increase, traditional single-threaded Print Drivers will be increasingly disadvantaged, as more and more processing power lies idle while pending print jobs are being processed.
Another related trend in personal computer (PC) hardware is the presence of more increasingly powerful graphics processing units used to render high quality graphics, such as High Definition video and computer generated graphics used in gaming and virtual reality applications, for display. These GPUs typically feature multiple texturing units, which are independent graphics rendering units that operate in parallel. Just as general purpose processing power may lie idle in typical office use scenarios, the load on GPU hardware is often far below the power available. Traditional print drivers have no means of accessing the spare rendering power of GPUs since they are single-threaded designs constrained to execute solely on general purpose system processors.
In addition to the trend toward multiprocessor systems with powerful graphics processing units, there are also new and alternative hardware architectures emerging that are inherently designed for parallel processing. One example is the Cell Broadband Engine, currently used in the Sony PlayStation 3 gaming machine. The current Cell architecture consists of one dual-threaded general-purpose processor interconnected with eight special-purpose processing elements. Each special purpose element is optimized for “single instruction multiple data” processing in an independent thread of execution. Traditional print driver designs have no means of utilizing the parallel processing power of the Cell, or any other inherently multi-threaded architecture.
Therefore, it is an object of the present invention to process print jobs in a multi-threaded manner, thus making explicit use of the multiple processors present on the host system, whether those processors are general or special purpose.
In the prior art, there are examples of methods that make use of multiple processors for the purpose of rasterizing portions of a page in parallel. In one such example, US2004/0196483, a print driver partitions a page description into a plurality of scan lines, and uses multiple processors to rasterize the scan lines in parallel. However, this method uses fine-grained parallelism (i.e. the scan line). Depending on the complexity and size of the print job, fine-grained parallelism may be suboptimal due to the overhead associated with excessive context switching. Thus, it is another object of the present invention to determine on a per job basis the optimal level of granularity to best utilize the multiple processing capability of the hardware.
Also in the prior art, it is common for both print drivers as well as RIPs to be architected as a pipeline of processing steps, with FIFOs between the various processing stages in the pipeline. U.S. Pat. Nos. 6,433,885 and 7,102,768 are two such examples in which a print driver pipeline is constructed from a plurality of processing stages. While these methods allow efficient operation in the presence of resource limitations at the ends of the respective pipelines, they are still inherently single-threaded and cannot take advantage of multiple processors. Thus, it is another object of the present invention to construct print driver processing pipelines using independent execution threads for at least two of the processing stages in order to make explicit use of multiple processors when they are available.
In still another example from the prior art, US20060274345, an adaptive print driver is disclosed that analyzes both the host computer processing capabilities as well as those of the printer RIP and determines the proportions of rendering that should be performed on the host in order to load balance for optimal throughput. However, this print driver is inherently single-threaded and will therefore allow processors to remain idle on a multiprocessor system. Further, it relies on communication with the printer to properly determine the proportion of rendering that should be performed on the host side. Thus, it is yet another object of the present invention to make full use of host computer processing capabilities through explicit use of parallel rendering, without regard to the capabilities of the printer RIP controller.